// 第一题
// 实现一个红绿灯效果

// 串行逻辑通常可以通过promise实现和递归实现


// 方法一
// 函数之间的递归思路
function red() {
    // return new Promise(resolve => {
        setTimeout(_ => {
            console.log('现在还是红灯,三秒后是绿灯');
            green();
        }, 3000)
    // })
}

function green() {
    // return new Promise(resolve => {
        setTimeout(_ => {
            console.log('现在是绿灯, 三秒后就变成黄灯')
            yellow();
        }, 3000);
    // })
}

function yellow() {
    // return new Promise(resolve => {
        setTimeout(_ => {
            console.log('现在是黄灯, 三秒后就变成红灯')
            red();
        }, 3000);
    // })
}

// red();



// 方法二: 优化promis思路
function light(color, delay, nextColor) {
    return new Promise(resolve => {
        setTimeout(_=> {
            console.log(`现在是${color}灯,三秒后是${nextColor}灯`);
            resolve(color)
        }, delay);
    });
}

const running = async function() {
    await light('红', 3000, '绿');
    await light('绿', 3000, '黄');
    await light('黄', 3000, '红');
    arguments.callee();
}
running();